Introduction

A design document is a way for you to communicate to others what your design decisions are and why your decisions are good decisions.
From How to Write an Effective Design Document by Scott Hackett

Many software projects span many years and it is natural for team members to leave and others arrive. Design documentation is a useful tool for bringing new members up-to-speed quickly. A good design doc provides a high-level perspective of the requirements, domain and architecture. And as appropriate selected sub-systems are described in detail.

Learning Outcomes

Study Resources

For your study of this topic, use some of these resources.

Web Articles and Blogs

There are many software architectures; some are more complex than others. Similarly there are many forms of software design documentation; some are much more complex than others. We encourage light-weight documentation that favors quality over quantity. Excerpts of Scott Hackett provides a simple description of design documentation and Martin Fowler provides a humorous encounter with a team's impressive documentation.

The Agile Modeling website is full of good content for modeling in an agile environment. This webpage on best practices is a good read.

Many in Agile circles say that code should be the design documentation and it is certainly true that good design and clear code communication can enhance a developer's understanding of the system. Here's what Martin Fowler has to say about that:

Finally, software maven Joel Spolsky provides his own take on design document (what he calls "Functional Spec"):

Wikipedia

Class Lecture

Exercises

After-Class Exercises

Project Activities